home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / xdreg.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  6KB  |  179 lines

  1. /*    @(#)xdreg.h 1.5 86/04/21 SMI    */
  2.  
  3. /*
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6. #ifndef _XDREG_
  7. #define _XDREG_
  8.  
  9. /*
  10.  * Xylogics 751 declarations
  11.  */
  12.  
  13. /*
  14.  * IOPB - in real memory so we can use bit fields
  15.  */
  16. struct xdiopb {
  17.         /* BYTE 0 */
  18.     u_char    xd_iserr    :1;    /* error indicator */
  19.     u_char    xd_complete    :1;    /* completion code valid */
  20.     u_char    xd_chain    :1;    /* command chaining */
  21.     u_char    xd_sgm        :1;    /* scatter/gather mode */
  22.     u_char    xd_cmd        :4;    /* command */
  23.         /* BYTE 1 */
  24.     u_char    xd_errno;        /* error number */
  25.         /* BYTE 2 */
  26.     u_char    xd_dstat;        /* drive status */
  27.         /* BYTE 3 */
  28.     u_char    xd_resvd;        /* reserved */
  29.         /* BYTE 4 */
  30.     u_char    xd_subfunc;        /* subfunction code */
  31.         /* BYTE 5 */
  32.     u_char    xd_fixd        :1;    /* fixed/removable media */
  33.     u_char    xd_hdp        :1;    /* hold dual-port drive */
  34.     u_char    xd_psel        :1;    /* priority select (dual-port) */
  35.     u_char    xd_bht        :1;    /* black hole transfer */
  36.     u_char            :1;
  37.     u_char    xd_unit        :3;    /* unit number */
  38.         /* BYTE 6 */
  39.     u_char    xd_llength    :5;    /* link length (scatter/gather) */
  40. #define xd_drparam xd_llength        /* used for set drive params */
  41. #define xd_interleave xd_llength    /* used for set format params */
  42.     u_char    xd_intpri    :3;    /* interrupt priority */
  43.         /* BYTE 7 */
  44.     u_char    xd_intvec;        /* interrupt vector */
  45.     u_short    xd_nsect;        /* 8,9: sector count */
  46.     u_short    xd_cylinder;        /* a,b: cylinder number */
  47. #define xd_throttle xd_cylinder        /* used for write ctlr params */
  48.     u_char    xd_head;        /* c: head number */
  49.     u_char    xd_sector;        /* d: sector number */
  50.     u_char    xd_bufmod;        /* e: buffer address modifier */
  51. #define xd_hsect xd_bufmod        /* used for read drive status */
  52. #define xd_ctype xd_bufmod        /* used for read ctlr params */
  53.         /* BYTE F */
  54.     u_char    xd_prio        :1;    /* high priority iopb */
  55.     u_char            :1;
  56.     u_char    xd_nxtmod     :6;    /* next iopb addr modifier */
  57.     u_int    xd_bufaddr;        /* 10-13: buffer address */
  58. #define xd_promrev xd_bufaddr        /* used for read ctlr params */
  59.     u_int    xd_nxtaddr;        /* 14-17: next iopb address */
  60.     u_short    xd_cksum;        /* 18,19: iopb checksum */
  61.     u_short    xd_eccpat;        /* 1a,1b: ECC pattern */
  62.     u_short    xd_eccaddr;        /* 1c,1d: ECC address */
  63. };
  64.  
  65. /*
  66.  * Commands -- the values are shifted by a byte so they can be folded
  67.  * with the subcommands into a single variable.
  68.  */
  69. #define XD_NOP        0x000    /* nop */
  70. #define XD_WRITE    0x100    /* write */
  71. #define XD_READ        0x200    /* read */
  72. #define XD_SEEK        0x300    /* seek */
  73. #define XD_RESTORE    0x400    /* drive reset */
  74. #define XD_WPAR        0x500    /* write params */
  75. #define XD_RPAR        0x600    /* read params */
  76. #define XD_WEXT        0x700    /* extended write */
  77. #define XD_REXT        0x800    /* extended read */
  78. #define XD_DIAG        0x900    /* diagnostics */
  79. #define XD_ABORT    0xa00    /* abort */
  80.  
  81. /*
  82.  * Subcommands
  83.  */
  84.     /*
  85.      * seek
  86.      */
  87. #define XD_RCA        0x00    /* report current address */
  88. #define XD_SRCA        0x01    /* seek and report current address */
  89. #define XD_SSRCI    0x02    /* start seek and report completion */
  90.     /*
  91.      * read and write parameters
  92.      */
  93. #define XD_CTLR        0x00    /* controller parameters */
  94. #define XD_DRIVE    0x80    /* drive parameters */
  95. #define XD_FORMAT    0x81    /* format parameters */
  96. #define XD_DSTAT    0xa0    /* drive status (read only) */
  97.     /*
  98.      * extended read and write
  99.      */
  100. #define XD_THEAD    0x80    /* track headers */
  101. #define XD_FORMVER    0x81    /* format (write), verify (read) */
  102. #define XD_HDE        0x82    /* header, data and ecc */
  103. #define XD_DEFECT    0xa0    /* defect map */
  104. #define XD_EXTDEF    0xa1    /* extended defect map */
  105.  
  106. /*
  107.  * Error codes
  108.  */
  109. #define    XDE_OK        0x00        /* command succeeded */
  110. #define    XDE_CADR    0x10        /* cylinder addr error */
  111. #define    XDE_HADR    0x11        /* head addr error */
  112. #define    XDE_SADR    0x12        /* sector addr error */
  113. #define    XDE_0CNT    0x13        /* zero sector count */
  114. #define    XDE_ILLC    0x14        /* unimplemented command */
  115. #define    XDE_IFL1    0x15        /* illegal field length 1 */
  116. #define    XDE_IFL2    0x16        /* illegal field length 2 */
  117. #define    XDE_IFL3    0x17        /* illegal field length 3 */
  118. #define    XDE_IFL4    0x18        /* illegal field length 4 */
  119. #define    XDE_IFL5    0x19        /* illegal field length 5 */
  120. #define    XDE_IFL6    0x1a        /* illegal field length 6 */
  121. #define    XDE_IFL7    0x1b        /* illegal field length 7 */
  122. #define    XDE_ISGL    0x1c        /* illegal scatter/gather length */
  123. #define    XDE_NSEC    0x1d        /* not enough sectors/track */
  124. #define    XDE_ALGN    0x1e        /* iopb alignment error */
  125. #define    XDE_LINT    0x20        /* lost interrupt */
  126. #define    XDE_FERR    0x21        /* fatal error */
  127. #define    XDE_FECC    0x30        /* fixed ecc error */
  128. #define    XDE_ECCI    0x31        /* ecc error ignored */
  129. #define    XDE_SRTY    0x32        /* seek retry */
  130. #define    XDE_SFTR    0x33        /* soft retry */
  131. #define    XDE_HECC    0x40        /* hard ecc error */
  132. #define    XDE_HDNF    0x41        /* header not found */
  133. #define    XDE_NRDY    0x42        /* drive not ready */
  134. #define    XDE_OPTO    0x43        /* operation timeout */
  135. #define    XDE_DMAT    0x44        /* DMAC timeout */
  136. #define    XDE_DSEQ    0x45        /* disk dequencer error */
  137. #define    XDE_BPER    0x46        /* buffer parity error */
  138. #define    XDE_DPBY    0x47        /* dual port busy */
  139. #define    XDE_HDEC    0x48        /* header ecc error */
  140. #define    XDE_RVER    0x49        /* read verify error */
  141. #define    XDE_FDMA    0x4a        /* fatal DMAC error */
  142. #define    XDE_VMEB    0x4b        /* vmebus error */
  143. #define    XDE_DFLT    0x60        /* drive faulted */
  144. #define    XDE_CHER    0x61        /* cylinder header error */
  145. #define    XDE_HHER    0x62        /* head header error */
  146. #define    XDE_OFCL    0x63        /* drive not on cylinder */
  147. #define    XDE_SEEK    0x64        /* drive seek error */
  148. #define    XDE_SSIZ    0x70        /* illegal sector size */
  149. #define    XDE_FIRM    0x71        /* firmware failure */
  150. #define    XDE_SECC    0x80        /* soft ecc error */
  151. #define    XDE_IRAM    0x81        /* iram checksum error */
  152. #define XDE_ABRT    0x82        /* abort by command */
  153. #define XDE_PROT    0x90        /* write protect error */
  154. #define    XDE_UNKN    0xff        /* unknown error */
  155.  
  156. /*
  157.  * Miscellaneous defines.
  158.  */
  159. #define XD_THROTTLE    32        /* 32 words/transfer */
  160. #define XDUNPERC    2        /* max # of units per controller */
  161.  
  162. /*
  163.  * Structure definition and macros used for a sector header.
  164.  */
  165. #define XD_HDRSIZE    4        /* bytes/sector header */
  166.  
  167. struct xdhdr {
  168.     /* Byte 0 */
  169.     u_char    xdh_cyl_lo;
  170.     /* Byte 1 */
  171.     u_char    xdh_cyl_hi;
  172.     /* Byte 2 */
  173.     u_char    xdh_head;
  174.     /* Byte 3 */
  175.     u_char    xdh_sec;
  176. };
  177.  
  178. #endif _XDREG_
  179.